package com.wawu.common.utils.SQLBuilder;


import java.util.List;

public class SelectSQLBuilder extends BaseSQLBuilder {

    public SelectSQLBuilder(String tableName) {
        super("SELECT * FROM " + tableName);  // 不再加上 WHERE 1=1
    }

    //TODO 待优化：折中了下，跟父类有点冗余了
    // 严格来讲这里也不是继承
    // 这里的问题：就是添加动态条件调用的是父类的，但是返回的父类，但是如果还需要排序之类的都不行了
    @Override
    public SelectSQLBuilder addDynamicCondition(String fieldName, String operator, Object value) {
        super.addDynamicCondition(fieldName, operator, value);
        return this;
    }

    @Override
    public SelectSQLBuilder addInCondition(String fieldName, List<?> values) {
        super.addInCondition(fieldName, values);
        return this;
    }

    @Override
    public SelectSQLBuilder addBetweenCondition(String fieldName, Object start, Object end) {
        super.addBetweenCondition(fieldName, start, end);
        return this;
    }
    //到这里结束

    /**
     * 自定义查询字段
     */
    public SelectSQLBuilder selectFields(String... fields) {
        if (fields != null && fields.length > 0) {
            // 构建字段列表
            String columns = String.join(", ", fields);

            // 找到 SQL 中 "SELECT " 和 " FROM" 的位置，替换 SELECT * 为指定的列
            int selectIndex = sql.indexOf("SELECT ") + "SELECT ".length(); // 找到 SELECT 后的位置
            int fromIndex = sql.indexOf(" FROM"); // 找到 FROM 关键字的位置

            if (selectIndex > 0 && fromIndex > selectIndex) {
                sql.replace(selectIndex, fromIndex, columns);  // 替换 * 为实际字段
            }
        }
        return this;
    }


    /**
     * 添加分组支持
     */
    public SelectSQLBuilder addGroupBy(String... fields) {
        if (fields != null && fields.length > 0) {
            sql.append(" GROUP BY ").append(String.join(", ", fields));
        }
        return this;
    }

    /**
     * 添加排序支持
     */
    public SelectSQLBuilder addOrderBy(String sortField, String sortOrder) {
        if (sortField != null && !sortField.isEmpty()) {
            sql.append(" ORDER BY ").append(sortField).append(" ").append(sortOrder);
        }
        return this;
    }

    /**
     * 添加分页支持
     */
    public SelectSQLBuilder addLimit(int limit, int offset) {
        sql.append(" LIMIT ").append(limit).append(" OFFSET ").append(offset);
        return this;
    }
}

//基础的sql构造器，当时就整了一个查询的
//import java.util.ArrayList;
//import java.util.List;
//public class SelectSQLBuilder {
//    private StringBuilder sql;
//    private List<Object> params;
//
//    public SelectSQLBuilder(String tableName) {
//        sql = new StringBuilder("SELECT * FROM ").append(tableName).append(" WHERE 1=1");
//        params = new ArrayList<>();
//    }
//
//    //TODO 后续改为:addDynamicCondition
//
//    // 添加普通条件（如果值为空则跳过）
//    public SelectSQLBuilder addDynamicCondition(String fieldName, String operator, Object value) {
//        if (value != null) { // 只有当值不为空时才添加
//            sql.append(" AND ").append(fieldName).append(" ").append(operator).append(" ?");
//            if ("LIKE".equalsIgnoreCase(operator)) {
//                params.add("%" + value + "%");
//            } else {
//                params.add(value);
//            }
//        }
//        return this;
//    }
//
//    // 支持 IN 条件
//    public SelectSQLBuilder addInCondition(String fieldName, List<?> values) {
//        if (values != null && !values.isEmpty()) { // 只有在值不为空时才添加
//            sql.append(" AND ").append(fieldName).append(" IN (");
//            for (int i = 0; i < values.size(); i++) {
//                sql.append("?");
//                if (i < values.size() - 1) sql.append(", ");
//            }
//            sql.append(")");
//            params.addAll(values);
//        }
//        return this;
//    }
//
//    // 支持 BETWEEN 条件
//    public SelectSQLBuilder addBetweenCondition(String fieldName, Object start, Object end) {
//        if (start != null && end != null) { // 只有在开始和结束都不为空时才添加
//            sql.append(" AND ").append(fieldName).append(" BETWEEN ? AND ?");
//            params.add(start);
//            params.add(end);
//        }
//        return this;
//    }
//
//    // 添加排序
//    public SelectSQLBuilder addOrderBy(String sortField, String sortOrder) {
//        if (sortField != null && !sortField.isEmpty()) {
//            sql.append(" ORDER BY ").append(sortField).append(" ").append(sortOrder);
//        }
//        return this;
//    }
//
//    // 返回生成的 SQL 语句
//    public String getSQL() {
//        //TODO 方便后续debug
//        System.out.println(sql.toString());
//        System.out.println(params);
//
//        return sql.toString();
//    }
//
//    // 返回参数列表
//    public Object[] getParams() {
//        return params.toArray();
//    }
//}
